import re

"""
match 方法是从字符串的开头开始匹配的，一旦开头不匹配，那么整个匹配就失败了
这里就有另外一个方法 search，它在匹配时会扫描整个字符串，然后返回第一个成功匹配的结果。也就是说，正则表达式可以是字符串的一部分
"""

# 示例1 match 开头匹配不到，直接None

# content = 'Extra stings Hello 1234567 World_This is a Regex Demo Extra stings'
# result = re.match('Hello.*?(\d+).*?Demo', content)
# print(result) # None


# 示例2 search， 匹配字符串的一部分

# content = 'Extra stings Hello 1234567 World_This is a Regex Demo Extra stings'
# result = re.search('Hello.*?(\d+).*?Demo', content)
# print(result) # <re.Match object; span=(13, 53), match='Hello 1234567 World_This is a Regex Demo'>
# print(result.group()) # Hello 1234567 World_This is a Regex Demo
# print(result.group(1)) #  1234567


"""
 总结 示例1、2 为了匹配方便，我们可以尽量使用 search 方法。
"""

html = '''
<div id="songs-list">
  <h2 class="title">经典老歌</h2>
  <p class="introduction">经典老歌列表</p>
  <ul id="list" class="list-group">
    <li data-view="2">一路上有你</li>
    <li data-view="7">
      <a href="/2.mp3" singer="任贤齐">沧海一声笑</a>
    </li>
    <li data-view="4" class="active">
      <a href="/3.mp3" singer="齐秦">往事随风</a>
    </li>
    <li data-view="6"><a href="/4.mp3" singer="beyond">光辉岁月</a></li>
    <li data-view="5"><a href="/5.mp3" singer="陈慧琳">记事本</a></li>
    <li data-view="5">
      <a href="/6.mp3" singer="邓丽君">但愿人长久</a>
    </li>
  </ul>
</div>
'''

# 示例取上面 html文本数据01
# 首先，我们尝试提取 class 为 active 的 li 节点内部的超链接包含的歌手名和歌名，此时需要提取第三个 li 节点下 a 节点的 singer 属性和文本。
result = re.search('<li.*?active.*?singer="(.*?)">(.*?)</a>', html, re.S)
"""
搜索整个 HTML 文本，找到符合正则表达式的第一个内容返回。

另外，由于代码有换行，所以这里第三个参数需要传入 re.S
"""
print(result.group())
print(result.group(1)) # 齐秦
print(result.group(2)) # 往事随风



